package com.atguigu.bigdata.spark.core.rdd.operator.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * create by undeRdoG on  2021-06-13  14:21
  * 凡心所向，素履以往，生如逆旅，一苇以航。
  */
object Spark02_RDD_Operation_Action {

  def main(args: Array[String]): Unit = {

    val sparkConf = new SparkConf().setAppName("Operator").setMaster("local[*]")
    val sc = new SparkContext(sparkConf)


    val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))

    //  行动算子  Reduce
    /**
      * 之前的转换算子都是将当前的RDD转换成另一种RDD
      * 而行动算子Reduce没有将当前算子转换成新的RDD，而是直接就提交作业执行了
      **/

    val i = rdd.reduce(_ + _)
    println(i)


    /**
    * collect  方法：会将不同分区的数据按照  分区   进行采集,采集到的 driver端的内存中进行处理
      * 也可以看到，调用了行动算子 collect后，得到的结果不再是RDD，而是一个 数组Array
    * */
    val ints: Array[Int] = rdd.collect()
    println(ints.mkString(","))

    /**
    *  count ：统计数据源中的个数
    * */
    val count: Long = rdd.count()
    println(count)


    /**
    *  first： 获取数据源中的第一个
    * */
    val first: Int = rdd.first()
    println(first)


    /**
    *  获取前 n个数据
    * */
    val take: Array[Int] = rdd.take(3)
    println(take.mkString(","))


    val rdd1: RDD[Int] = sc.makeRDD(List(4,2,3,1));



    /**
    *  数据排序后取前 N 个数据
    * */
    val ordered = rdd1.takeOrdered(2)
    println(ordered.mkString(","))
  }
}
